﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using MS.InformationManagement.DAL.DocumentCenter;
using MS.InformationManagement.Support.Constants;

namespace MS.InformationManagement.BLL.PrestamoDeRadicados
{
    public class PrestamoDeRadicados
    {
        public static List<SolicitudDePrestamosContentType> CargarSolicitudes(int ItemID)
        {
            List<SolicitudDePrestamosContentType> listaSolicitud = new List<SolicitudDePrestamosContentType>();
            SolicitudDePrestamosContentType solicitud = new SolicitudDePrestamosContentType();

            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                SPUserToken systoken = SPContext.Current.Site.SystemAccount.UserToken;
                using (SPSite currentSite = new SPSite(SPContext.Current.Web.Url, systoken))
                {
                    using (SPWeb currentWeb = currentSite.OpenWeb())
                    {
                        SPList prestamosList = currentWeb.Lists.TryGetList(GlobalConstants.LIST_PRESTAMOS);
                        SPListItem item = prestamosList.Items.GetItemById(ItemID);
                        if (item != null)
                        {
                            solicitud.UsuarioSolicitud = new SPFieldUserValue(currentWeb, item[CustomSiteColumns.FIELD_SOLICITUD_PRESTAMOS_USER_SOLICITUD].ToString()).User.LoginName + "";
                            solicitud.UsuarioPrestamo = new SPFieldUserValue(currentWeb, item[CustomSiteColumns.FIELD_SOLICITUD_PRESTAMOS_USER_PRESTAMO].ToString()).User.LoginName + "";
                            solicitud.ObservacionesSolicitud = item[CustomSiteColumns.FIELD_SOLICITUD_PRESTAMOS_OBS_SOLICITUD] + "";
                            solicitud.ObservacionesPrestamo = item[CustomSiteColumns.FIELD_SOLICITUD_PRESTAMOS_OBSERVACIONES_PRESTAMO] + "";
                            solicitud.DepartamentoUsuarioSolicitud = item[CustomSiteColumns.FIELD_SOLICITUD_PRESTAMOS_USER_DEPT_SOLICITUD] + "";
                            solicitud.DepartamentoUsuarioPrestamo = item[CustomSiteColumns.FIELD_SOLICITUD_PRESTAMOS_USER_DEPT_PRESTAMO] + "";
                            solicitud.EstadoDePrestamo = returnEstadoDePrestamo(item[CustomSiteColumns.FIELD_SOLICITUD_PRESTAMOS_ESTADO] + "");
                            solicitud.TipoDePrestamo = returnTipoPrestamo(item[CustomSiteColumns.FIELD_SOLICITUD_PRESTAMOS_TIPO] + "");
                            solicitud.IDRadicadoExpediente = item[CustomSiteColumns.FIELD_SOLICITUD_PRESTAMOS_ID_RADICADO] + "";
                            solicitud.Id = item.ID;
                            solicitud.FechaDeSolicitud = DateTime.Parse(item[SPBuiltInFieldId.Created] + "");
                        }
                    }
                }
            });
            
            listaSolicitud.Add(solicitud);

            return listaSolicitud;
        }

        public static bool UpdateSolicitud(int ItemID, string ObservacionesPrestamo, EstadoDePrestamo EstadoPrestamo)
        {
            bool result = false;
            try
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    SPUserToken systoken = SPContext.Current.Site.SystemAccount.UserToken;
                    using (SPSite currentSite = new SPSite(SPContext.Current.Web.Url, systoken))
                    {
                        using (SPWeb currentWeb = currentSite.OpenWeb())
                        {
                            currentWeb.AllowUnsafeUpdates = true;                            
                            SPList listPrestamos = currentWeb.Lists.TryGetList(GlobalConstants.LIST_PRESTAMOS);
                            SPListItem newItem = listPrestamos.Items.GetItemById(ItemID);
                            newItem[CustomSiteColumns.FIELD_SOLICITUD_PRESTAMOS_OBSERVACIONES_PRESTAMO] = ObservacionesPrestamo;
                            newItem[CustomSiteColumns.FIELD_SOLICITUD_PRESTAMOS_ESTADO] = EstadoPrestamo.ToString();
                            if (EstadoPrestamo == EstadoDePrestamo.Rechazado)
                            {
                                newItem[CustomSiteColumns.FIELD_SOLICITUD_PRESTAMOS_FECHA_DEVOLCION] = DateTime.Now;
                            }
                            newItem.Update();
                            currentWeb.AllowUnsafeUpdates = false;
                            result = true;
                        }
                    }
                });
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return result;
        }

        private static TipoDePrestamo returnTipoPrestamo(string prestamo)
        {
            if (prestamo == TipoDePrestamo.Expediente.ToString())
            {
                return TipoDePrestamo.Expediente;
            }
            else
            {
                return TipoDePrestamo.Radicado;
            }
        }

        private static EstadoDePrestamo returnEstadoDePrestamo(string estado)
        {
            switch (estado)
            {
                case "Aceptado":
                    return EstadoDePrestamo.Aceptado;
                    break;
                case "Devuelto":
                    return EstadoDePrestamo.Devuelto;
                    break;
                case "Pendiente":
                    return EstadoDePrestamo.Pendiente;
                    break;
                case "Rechazado":
                    return EstadoDePrestamo.Rechazado;
                    break;
                default:
                    return EstadoDePrestamo.None;
                    break;
            }
        }
    }
}
